The most common background color is no background color.
GtkCssStyle *style,
GtkCssStyle *parent_style)
{
- static const GdkRGBA transparent = { 0, 0, 0, 0 };
-
switch (property_id)
{
case GTK_CSS_PROPERTY_BACKGROUND_IMAGE:
case GTK_CSS_PROPERTY_TEXT_SHADOW:
case GTK_CSS_PROPERTY_ICON_SHADOW:
case GTK_CSS_PROPERTY_BOX_SHADOW:
- return _gtk_css_rgba_value_new_from_rgba (&transparent);
+ return _gtk_css_rgba_value_new_transparent ();
case GTK_CSS_PROPERTY_COLOR:
case GTK_CSS_PROPERTY_BACKGROUND_COLOR:
case GTK_CSS_PROPERTY_BORDER_TOP_COLOR:
if (property_id < GTK_CSS_PROPERTY_N_PROPERTIES)
g_warning ("No fallback color defined for property '%s'",
_gtk_style_property_get_name (GTK_STYLE_PROPERTY (_gtk_css_style_property_lookup_by_id (property_id))));
- return _gtk_css_rgba_value_new_from_rgba (&transparent);
+ return _gtk_css_rgba_value_new_transparent ();
}
}
gtk_css_value_rgba_print
};
+static GtkCssValue transparent_black_singleton = (GtkCssValue) { >K_CSS_VALUE_RGBA, 1, { 0, 0, 0, 0 }};
+static GtkCssValue transparent_white_singleton = (GtkCssValue) { >K_CSS_VALUE_RGBA, 1, { 1, 1, 1, 0 }};
+
GtkCssValue *
_gtk_css_rgba_value_new_from_rgba (const GdkRGBA *rgba)
{
g_return_val_if_fail (rgba != NULL, NULL);
+ if (gdk_rgba_is_clear (rgba))
+ {
+ if (rgba->red == 1 &&
+ rgba->green == 1 &&
+ rgba->blue == 1)
+ return _gtk_css_value_ref (&transparent_white_singleton);
+
+ if (rgba->red == 0 &&
+ rgba->green == 0 &&
+ rgba->blue == 0)
+ return _gtk_css_value_ref (&transparent_black_singleton);
+ }
+
value = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_RGBA);
value->rgba = *rgba;
return value;
}
+GtkCssValue *
+_gtk_css_rgba_value_new_transparent (void)
+{
+ return _gtk_css_value_ref (&transparent_black_singleton);
+}
+
const GdkRGBA *
_gtk_css_rgba_value_get_rgba (const GtkCssValue *rgba)
{
G_BEGIN_DECLS
-GtkCssValue * _gtk_css_rgba_value_new_from_rgba (const GdkRGBA *rgba);
+GtkCssValue * _gtk_css_rgba_value_new_from_rgba (const GdkRGBA *rgba);
+GtkCssValue * _gtk_css_rgba_value_new_transparent (void);
const GdkRGBA * _gtk_css_rgba_value_get_rgba (const GtkCssValue *rgba) G_GNUC_PURE;
GtkCssValue *
_gtk_css_shadow_value_new_for_transition (GtkCssValue *target)
{
- GdkRGBA transparent = { 0, 0, 0, 0 };
-
g_return_val_if_fail (target->class == >K_CSS_VALUE_SHADOW, NULL);
return gtk_css_shadow_value_new (_gtk_css_number_value_new (0, GTK_CSS_PX),
_gtk_css_number_value_new (0, GTK_CSS_PX),
_gtk_css_number_value_new (0, GTK_CSS_PX),
target->inset,
- _gtk_css_rgba_value_new_from_rgba (&transparent));
+ _gtk_css_rgba_value_new_transparent ());
}
enum {
GTK_CSS_AFFECTS_BACKGROUND,
color_parse,
color_query,
- _gtk_css_color_value_new_rgba (0, 0, 0, 0));
+ _gtk_css_rgba_value_new_transparent ());
gtk_css_style_property_register ("font-family",
GTK_CSS_PROPERTY_FONT_FAMILY,